<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 如何获取对象

        // 1. 字面量   可以创建对象  但是批量 
        // var obj1 = {}
        // obj1.name = '张三'
        // obj1.sing = function(){
        //     alert(this.name);
        // }


        // var obj2 = {}
        // obj2.name = '张三'
        // obj2.sing = function(){
        //     alert(this.name);
        // }


        //2. 内置构造函数   不能批量创建 
        // const obj1 = new Object();
        // obj1.name = '李四';
        // obj1.sing = function(){
        //     alert(this.name)
        // };

        // const obj2 = new Object();
        // obj2.name = 'wangwi';
        // obj2.sing = function(){
        //     alert(this.name)
        // };

        //3.工厂函数  
        function createObj(name,fn){
            // 每次执行函数 创建一个空对象 
            var obj = {}
            obj.name = name; //创建一个新的属性 并且给新的属性赋值 
            obj.sing = fn;
            return obj;
        }
        // console.log(createObj('zhangsan',()=>{console.log('我叫张三')}));
        // console.log(createObj('lisi',()=>{console.log('我叫lisi')}));
        // console.log(createObj('wangwu',()=>{console.log('我王五')}));
        // console.log(createObj('赵六',()=>{console.log('我叫赵柳')}));


        // 4.构造函数  
        // 就是个函数  使用这个函数的时候 跟new 一起用 

        // new Object()
        // new Array()
        // new String()
        // new RegExp()

        function creatsuperObj(name,age,fn){
            this.name = name
            this.age = age

            this.eat = fn;
        }


        new creatsuperObj('张三',18,()=>{console.log(`${this.name}正在吃`)})

        new creatsuperObj('坤坤',19,()=>{console.log(`${this.name}正在吃`)})

        new creatsuperObj('空空',20,()=>{console.log(`${this.name}正在吃`)})
    </script>
</body>
</html>